物聯網課程有幾個著名教學範例,其中溫溼度感測器就是一個相當有意思的裝置。我們在日常生活中常會確認目前室內溫度幾度,決定是否要開電扇或是空調?如果覺得室內環境很潮濕、悶熱。就更要適時開啟除濕機,調整室內的濕度。除了使用傳統的溫度計或是溼度計,那冷氣或是除溼機等設備,它們是如何偵測到現場的溫溼度呢?我們來看看很常在家電中見到的 DHT 11 感測元件。
我們平常買到的DHT11溫濕度感測器模組,如同下圖所示。
DHT11 是一種數位式的溫溼度感測器,其主要的特點有:
工作原理:
技術規格書可從此連結下載。如果有興趣了解更深入的技術規格與傳輸協定解析,強烈推薦閱讀由「早安,苦命工程師的胡言亂語」所撰寫的「DHT11 DHT22 溫溼度感測器[Flash FORTH]」的文章。裡面有詳細的圖解與原理解釋,非常值得學習。
讀取溫溼度資料的程式並不難編寫,但困難的是如何長期記錄(溫溼度感測器能穩定地持續工作)並將這些資料能夠存下(存在內部的記憶體、網路通訊上傳至伺服器或是將數據寫到資料庫中)。因此,我們來學學 MicroPython 中跟檔案存取有關的幾個函數。
MicroPython 內建一個檔案讀寫的 uio 模組,可以將記憶體緩衝區中的物件進行讀取與寫入的操作。
# 開檔
import uio
file = uio.StringIO()
# 讀檔
with open('boot.py', 'r') as f:
file_content = f.read()
print(file_content)
file.close()
import uio
file = uio.StringIO()
file.write("Hello, WiFiBoy!")
# 建立一個檔案並將記憶體的內容寫到檔案中
with open('example.txt', 'w') as f:
f.write(file.getvalue())
# 讀檔
with open('example.txt', 'r') as f:
file_content = f.read()
print(file_content)
file.close()
# 溫溼度記錄器
from machine import Pin
import utime as time
from dht import DHT11
import uio
DHT_PIN = 5
dhtSensor = DHT11(Pin(DHT_PIN, Pin.OUT, Pin.PULL_DOWN))
f = open('TempHumd.txt', 'w')
f.write('# Temperature and Humidity\n')
f.close()
f = open('TempHumd.txt', 'a')
count = 0
while True:
if count >= 10:
break
else:
dhtSensor.measure()
temp = dhtSensor.temperature()
humidity = dhtSensor.humidity()/100
f.write('%d , %3.2f\n' % (temp, humidity))
time.sleep(5)
count += 1
f.close()